/*
 * DuzaLiczba.cpp
 *
 * Version: $Id: DuzaLiczba.cpp 89 2012-01-17 21:42:17Z s8376@pjwstk.edu.pl $
 */
#include <iostream>
#include <cstdio>
#include "DuzaLiczba.h"

using namespace std;

bool isIdentical(char* a, char* b)
{
    bool result = true;
    while (*a != 0) {
        if (a != b)
            result = false;

        a++;
        b++;
    }
    if (*a != 0 || *b != 0)
        result = false;

    return result;
}

DuzaLiczba::DuzaLiczba()
{
    m_value = new char[2];
    m_value[0] = '0';
    m_value[1] = '\0';
}
DuzaLiczba::DuzaLiczba(int number)
{
    m_value = new char[countDigitsInInt(number) + 1];
    sprintf(m_value, "%d", number);
}
DuzaLiczba::DuzaLiczba(const DuzaLiczba& object)
{
    m_value = new char[strlen(object.m_value) + 1];
    strcpy(m_value, object.m_value);
}
DuzaLiczba::~DuzaLiczba()
{
    delete[] m_value;
    m_value = 0;
}
int DuzaLiczba::countDigitsInInt(int number)
{
    int i;

    for (i = 0; number > 0; i++)
        number = number / 10;
    if (i == 0)
        i = 1;

    return i;
}
DuzaLiczba& DuzaLiczba::operator=(const DuzaLiczba& object)
{
    if (this != &object) {
        m_value = new char[strlen(object.m_value) + 1];
        strcpy(m_value, object.m_value);
    }
    return *this;
}
DuzaLiczba& DuzaLiczba::operator=(const char* value)
{
    m_value = new char[strlen(value) + 1];
    strcpy(m_value, value);
    return *this;
}
DuzaLiczba& DuzaLiczba::operator=(int number)
{
    m_value = new char[countDigitsInInt(number) + 1];
    sprintf(m_value, "%d", number);
    return *this;
}
bool operator==(const DuzaLiczba& a, const DuzaLiczba& b)
{
    return (isIdentical(a.m_value, b.m_value)) ? true : false;
}
bool operator==(const DuzaLiczba& a, char* b)
{
    return (isIdentical(a.m_value, b)) ? true : false;
}
bool operator!=(const DuzaLiczba& a, const DuzaLiczba& b)
{
    return (isIdentical(a.m_value, b.m_value)) ? false : true;
}
DuzaLiczba& DuzaLiczba::operator+=(DuzaLiczba const& ob)
{
    //    m_value = m_value + ob.m_value;// FIXME
    return *this;
}
DuzaLiczba& DuzaLiczba::operator+=(int num)
{
    //    m_value = m_value + num;// FIXME
    return *this;
}
DuzaLiczba& DuzaLiczba::operator-=(DuzaLiczba const&)
{
    //    m_value = m_value - num;// FIXME
    return *this;
}
DuzaLiczba& DuzaLiczba::operator*=(DuzaLiczba const& ob)
{
    //    m_value = m_value * ob.m_value;// FIXME
    return *this;
}
DuzaLiczba& DuzaLiczba::operator/=(DuzaLiczba const& ob)
{
    //    m_value = m_value * ob.m_value;// FIXME
    return *this;
}
bool DuzaLiczba::operator>=(DuzaLiczba const& ob) const
{
    // FIXME
    return true;
}
bool DuzaLiczba::operator>=(int number) const
{
    // FIXME
    return true;
}
DuzaLiczba DuzaLiczba::operator+(DuzaLiczba const& ob)
{
    /// FIXME
    return DuzaLiczba();
}
DuzaLiczba operator-(DuzaLiczba ob1, DuzaLiczba ob2)
{
    return DuzaLiczba(ob1.m_value - ob2.m_value);
}
DuzaLiczba DuzaLiczba::operator-()
{
    //    -m_value; // FIXME
    return DuzaLiczba();
}
DuzaLiczba DuzaLiczba::operator*(DuzaLiczba ob)
{
    //    m_value *= ob.m_value; // FIXME
    return DuzaLiczba();
}
DuzaLiczba DuzaLiczba::operator/(DuzaLiczba ob)
{
    //    m_value /= ob.m_value; // FIXME
    return DuzaLiczba();
}
DuzaLiczba DuzaLiczba::operator!()
{
    // FIXME
    return DuzaLiczba();
}
bool DuzaLiczba::operator<(DuzaLiczba const& ob) const
{
    // FIXME
    return true;
}
bool DuzaLiczba::operator<(const char*) const
{
    // FIXME
    return true;
}
ostream& operator<<(ostream& out, const DuzaLiczba& ob)
{
    out << ob.m_value;
    return out;
}
istream& operator>>(istream& in, DuzaLiczba& ob)
{
    in >> ob.m_value;
    return in;
}
/**
 * Interface
 */
char* DuzaLiczba::getValue()
{
	return m_value;
}
void DuzaLiczba::setValue(char* str)
{
	delete[]m_value;
	m_value = str;
}
